package com.fulu.netty.luban.bio;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

/**
 * 不适用线程的Bio测试
 * 测试结果：
 * 当一个客户端连接进来 accept阻塞通过，开始接受消息
 * 其他客户端同时连接进来，由于第一个客户端的阻塞，不能获得地址信息也不能发送消息
 * 结论：
 * java Bio服务端必须一个线程对应一个连接。
 */
public class BioTest {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(1388);
            while (true) {
                Socket socket = serverSocket.accept();  // 阻塞等待客户端连接
                System.out.println(socket.getRemoteSocketAddress() + "coming");

                while (true) {
                    InputStream inputStream = socket.getInputStream();
                    OutputStream outputStream = socket.getOutputStream();

                    byte[] bytes = new byte[1024];
                    inputStream.read(bytes);  // 客户端没有发来数据一直阻塞
                    System.out.print(new String(bytes));

                    outputStream.write(new Date().toString().getBytes());
                    outputStream.flush();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
